package com.ttx.pattern.principle.dependence;

/**
 * 高层模块，业务场景类
 * @author TimFruit
 * @date 18-8-18 下午5:17
 */
public class Client {
    public static void main(String[] args) {
        //client属于高层模块业务逻辑，它对低层模块的依赖是建立在抽象之上的
        //IDriver是tim的表面类型，ICar是benz的表面类型

        IDriver tim=new Driver();

//        ICar benz=new Benz();
//        tim.drive(benz);


        //如若有一天，tim改成开宝马
        //注释掉上面两行代码，新建一个Bmw类，添加以下两行代码即可
        //这就是依赖倒置的好处，无需修改Driver类，即可做到根据需求的变化而变化
        //IDriver依赖于ICar, Client依赖于IDriver和ICar, Driver依赖于IDriver, Benz和Bmw依赖于ICar,
        //完全符合依赖倒置原则
        ICar bmw=new Bmw();
        tim.drive(bmw);


    }
}
